package com.baseframe.sys.controller;


import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.baseframe.sys.service.IFrameCodeService;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.baseframe.common.annotation.SysLog;
import com.baseframe.common.annotation.VisitLog;
import com.baseframe.common.utils.PageUtils;
import com.baseframe.common.utils.R;
import com.baseframe.common.validator.ValidatorUtils;
import com.baseframe.sys.entity.FrameCodeItem;
import com.baseframe.sys.entity.FrameCodeMain;

/**
 * 代码项控制层
 *
 * @author ChenJia
 */
@RestController
@RequestMapping("/sys/dict")
public class FrameCodeController {
    @Autowired
    private IFrameCodeService frameCodeService;

    /**
     * 列表
     */
    @VisitLog("代码项列表")
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params) {
        PageUtils page = frameCodeService.queryPage(params);

        return R.ok().put("page", page);
    }

    /**
     * 保存
     */
    @SysLog(value="保存代码项", type="新增")
    @RequestMapping("/save")
    public R save(@RequestBody FrameCodeMain dict) {
        //校验类型
        ValidatorUtils.validateEntity(dict);
        dict.setCodeguid(UUID.randomUUID().toString());

        // 查找是否已存在当前代码项的名称
        FrameCodeMain frameCodeMain = frameCodeService.findByCodeName(dict.getCodename());
        if (frameCodeMain != null) {
            return R.error("当前代码项已存在，请修改");
        }

        int ret = frameCodeService.insert(dict);

        return ret == 0 ? R.ok() : R.error("操作失败，请联系管理员");
    }

    /**
     * 删除
     */
    @SysLog(value="删除代码项", type="删除")
    @RequestMapping("/delete")
    public R delete(@RequestBody String[] ids) {
        int ret = frameCodeService.deleteBatchIds(Arrays.asList(ids));

        return ret == 0 ? R.ok() : R.error("操作失败，请联系管理员");
    }

    /**
     * 代码项子项列表
     *
     * @param params
     * @return
     */
    @VisitLog("子代码项列表")
    @RequestMapping("/item/list")
    public R itemList(@RequestParam Map<String, Object> params) {
        List<FrameCodeItem> page = frameCodeService.queryItemList(params);

        return R.ok().put("itemList", page);
    }

    /**
     * 保存
     */
    @SysLog(value="保存子代码项", type="新增")
    @RequestMapping("/item/save")
    public R saveItem(@RequestBody FrameCodeItem dictItem) {
        //校验类型
        ValidatorUtils.validateEntity(dictItem);
        dictItem.setItemguid(UUID.randomUUID().toString());

        // 查找是否已存在当前代码项的名称
        FrameCodeItem frameCodeItem = frameCodeService.findByItemtextAndItemvalueAndCodeguid(dictItem.getItemtext(), dictItem.getItemvalue(), dictItem.getCodeguid());
        if (frameCodeItem != null) {
            return R.error("当前代码项子项已存在，请修改");
        }

        int ret = frameCodeService.insert(dictItem);

        return ret == 0 ? R.ok() : R.error("操作失败，请联系管理员");
    }

    /**
     * 删除子项
     */
    @SysLog(value="删除子代码项", type="删除")
    @RequestMapping("/item/delete")
    public R deleteItem(@RequestBody String[] ids) {
        int ret = frameCodeService.deleteItems(Arrays.asList(ids));

        return ret == 0 ? R.ok() : R.error("操作失败，请联系管理员");
    }

    /**
     * 修改
     */
    @SysLog(value="修改代码项", type="修改")
    @RequestMapping("/item/update")
    public R update(@RequestBody List<FrameCodeItem> frameCodeItemList) {
        frameCodeService.saveAll(frameCodeItemList);
        return R.ok();
    }
}
